<?php 
namespace app\zylib\controller;
header('Content-Type:text/html;charset=utf-8');
use think\Controller;
use think\Loader;
/**
 * zyapi主控制器
 *返回错误码号码段定义:
 *				200   		请求成功返回码
 */
class ApiZyBaseController extends Controller
{
	/**
	 * 控制器主方法
	 */
	public function _initialize(){
		//检查权限
		self::authorizationCheck();
		//检查action 和自动加载扩展的方法
		self::functionCheck();
	}

	/**
	 * 权限检查  40-60定义公共参数错误码段，不可占用 自定义错误返回码请从100开始
	 *@param $aid 访问标识accessId
	 *@param $key 密匙
	 *@return json
	 *错误码解释：
	 *		40 - 未找到方法
	 *		50 - 未传递aid或者aid值不存在
	 *		51 - 未传递aid或者aid值不存在
	 *		52 - aid值错误
	 *		53 - key值错误
	 *		54 - 账户过期
	 *		55 - 账户被禁用
	 */
	private function authorizationCheck()
	{
		$data=$this->request->param();
		if(!isset($data['aid']) || empty($data['aid'])){
			echo zy_json(false,'缺少必要参数',null,50);exit;
		}
		if(!isset($data['key']) || empty($data['key'])){
			echo zy_json(false,'缺少必要参数',null,51);exit;
		}
		//检查权限
		$baseModel= new \app\zylib\model\ApiZyBaseModel();
		$result=$baseModel->authorizationCheck($data['aid'],$data['key']);
		if(true!==$result){
			//未通过验证返回验证结果
			echo $result;exit;
		}
	}

	/**
	 * 检查action自动加载方法
	 *@return 
	 */
	public function functionCheck()
	{
		$action=$this->request->action();
		$controller=$this->request->controller();
		//this中不存在该方法，去扩展里面找方法
		if(!method_exists($this,$action)){
			echo $this->executeExtendFunction($action);exit;
		}
	}
	/**
	 * 执行扩展方法
	 * this类中不存在action方法  则在扩展类中寻找并执行action方法
	 */
	public  function executeExtendFunction($action){
		$controller=$this->request->controller();
		//获取所有目录
		$path=APP_PATH.'zylib/extend';//扩展根目录
		$directory=scandir($path);
		$result=zy_json(false,'未找到方法：'.$action.'()',null,40);
		foreach ($directory as $key => $value) {
			if($value=='.' || $value=='..') continue;
			if(is_dir($path.'/'.$value)){
				$class="app\\zylib\\extend\\".$value."\\controller\\".$controller.'ExtendController';
				if(class_exists($class)){
					$extend = new $class();
					//执行扩展中的方法
					if(method_exists($extend, $action)){
						//执行扩展中的方法  并数据返回的结果 
						$result=$extend->$action();
						//如果不是字符串，则转换为json字符串
						if( !is_string($result) ){
							$result=json_encode($result,JSON_UNESCAPED_UNICODE);
						}
						break;
					}
				}
			}
		}		
		return $result;
	}
}